import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class KundenVerwaltung {
	private List<Kunde> kundenListe = new ArrayList<Kunde>();
	
	//Fuegt einen Kunden zur Liste hinzu, wenn seine ID noch nicht vergeben ist
	//Rueckgabewert: erfolgreich hinzugefuegt: true, sonst false
	public boolean hinzufuegen(Kunde kunde){
		if(kunde != null && !isIdRegistriert(kunde.getID())){
			kundenListe.add(kunde);
			return true;
		}
		return false;
	}
	
	//Entfernt den Kunden mit der angegebenen id
	//Rueckgabewert: true, falls Kunde entfernt wurde
	public boolean entfernen(int id){
		for(int i = 0; i < kundenListe.size(); i++){
			if(kundenListe.get(i).getID() == id){
				kundenListe.remove(i);
				return true;
			}
		}
		return false;
	}
	
	//Die Kunden werden zeilenweise in der Datei "dateiname.csv" gespeichert
	public void kundenSpeichern(String dateiname){
		File ordner = new File("Kundenlisten");
		if(!ordner.exists())  //Sicherstellung, dass der Ordner fuer die
			ordner.mkdir();   //Liste(n?) existiert
		FileWriter csvWriter = null;
		
		try {
			//Anlegen der Liste in "Kundenlisten/dateiname.csv"
			csvWriter = new FileWriter(ordner + File.separator + dateiname + ".csv");
			Iterator<Kunde> it = kundenListe.iterator();
			//Iterieren durch gesamte Liste
			while(it.hasNext()){
				//Anpassung der Kunden ans csv-Format &
				//Schreiben der Kunden in Datei
				csvWriter.write(getSerialisierungsString(it.next()));
				//Weitere Kunden vorhanden --> Zeilenumbruch wird angefuegt
				if(it.hasNext())
					csvWriter.write(System.getProperty("line.separator"));
				csvWriter.flush();
			}
		
		} catch (IOException e) {
			e.printStackTrace();
		} finally{
			try {
				csvWriter.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	//Ueberueft, ob bereits ein Kunde mit dieser ID in der Liste existiert
	private boolean isIdRegistriert(int id){
		Iterator<Kunde> it = kundenListe.iterator();
		while(it.hasNext()){ //Iterieren durch die Kundenliste
			if(it.next().getID() == id)
				return true;
		}
		return false;
	}
	
	//Rueckgabe: Ein String, der alle Werte des Kunden per Komma getrennt enthaelt
	private String getSerialisierungsString(Kunde kunde){
		StringBuffer serialStr = new StringBuffer();
		serialStr.append(kunde.getID());
		serialStr.append(",");
		serialStr.append(kunde.getGeschlecht());
		serialStr.append(",");
		serialStr.append(kunde.getName());
		serialStr.append(",");
		serialStr.append(kunde.getVorname());
		serialStr.append(",");
		serialStr.append(kunde.getStatus());
		serialStr.append(",");
		serialStr.append(kunde.getGeburtsdatum().getTime());
		serialStr.append(",");
		serialStr.append(kunde.getUmsatzerwartung());
		serialStr.append(",");
		serialStr.append(kunde.getUmsatz());
		return serialStr.toString();
	}
}
